package redis_mq

import (
	"context"
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/google/uuid"
	"mine-info-server/global"
	"mine-info-server/utils"
	"mine-info-server/utils/redis_mq/internal"
	"time"
)

/**
 * 封装消息内容的发送包
 */

// SendPlanExpireDelayMsg 发送创建计划后计划到期提醒的延时消息
func SendPlanExpireDelayMsg(ctx *gin.Context, planName string, endTime string) {
	// 计算计划结束时间减一周
	parseEndTime, _ := time.ParseInLocation("2006-01-02", endTime, time.Local)
	duration := parseEndTime.Sub(time.Now())
	// 如果这个时间大于一周时间，则需要减掉，否则直接传进去就可以了
	if duration > time.Hour*24*7 {
		duration = duration - time.Hour*24*7
	} else {
		duration = 0
	}
	msgContent := fmt.Sprintf("哎呀，你的计划「%s」即将到期啦，赶紧看看任务进度吧～", planName)
	// 这里可以再封装一层
	job := &global.MsgJob{
		Topic:  "", // 后续做成通用的这里就用上了
		ID:     uuid.New().String(),
		Delay:  duration,
		Body:   msgContent,
		UserId: utils.GetUserID(ctx),
	}
	// 发送延时消息
	internal.SendDelayMsg(ctx, job)
}

// SendSundayPlanRemindMsg 发送周日计划安排提醒的即时消息
func SendSundayPlanRemindMsg(ctx context.Context, users map[string]string) {
	for userId, userName := range users {
		msgContent := fmt.Sprintf("亲爱的「%s」，下周任务安排好了吗，请继续加油喔！", userName)
		// 这里可以再封装一层
		job := &global.MsgJob{
			Topic:  "", // 后续做成通用的这里就用上了
			ID:     uuid.New().String(),
			Body:   msgContent,
			UserId: userId,
		}
		// 发送延时消息
		internal.SendInstantMsg(ctx, job)
	}
}
